package main

import (
	"fmt"
	"strings"

	pg_query "github.com/pganalyze/pg_query_go/v6"
)

func main() {
	// 包含多条 SQL 语句的 DDL 字符串，其中注释里含有分号
	sql := `
	create table lc.t_le_logistics_require_main (
		IS_DELETED VARCHAR(1)  COMMENT '是否删除：1-删除; 0-未删除',
		REMARK VARCHAR(1000)  COMMENT '备注',
		GROUP_ID VARCHAR(64)  COMMENT '业务单据所属集团ID',
		le_logistics_require_main_id varchar(64) CONSTRAINT t_le_logistics_require_main_key PRIMARY KEY COMMENT '需求 ID',
		approver_time timestamp comment '审核时间'
	) comment '物流需求主表';
	-- 这是一个注释; 它包含了一个分号;
	CREATE INDEX idx_test ON test_table (data);
	-- 另一个注释; 同样包含分号;
	ALTER TABLE test_table ADD COLUMN new_column INTEGER;
	`

	// 使用 pg_query 解析 SQL
	parsed, err := pg_query.Parse(sql)
	if err != nil {
		fmt.Println("Error parsing SQL:", err)
		return
	}

	// 遍历解析后的语句
	for _, stmt := range parsed.Stmts {
		switch stmt.Stmt.Node.(type) {
		case *pg_query.Node_CreateStmt:
			fmt.Println("Found CREATE TABLE statement")
		case *pg_query.Node_IndexStmt:
			fmt.Println("Found CREATE INDEX statement")
		case *pg_query.Node_AlterTableStmt:
			fmt.Println("Found ALTER TABLE statement")
		default:
			fmt.Println("Unknown statement type")
		}
		//打印原始 SQL 语句
		start := stmt.StmtLocation
		end := stmt.StmtLocation + stmt.StmtLen
		if start >= 0 && end > start && end <= int32(len(sql)) {
			fmt.Println(strings.TrimSpace(sql[start:end]))
		} else {
			fmt.Println("Could not extract SQL statement")
		}
	}
}
